package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import modelo.Anfitrion;
import modelo.AnfitrionDAO;
import modelo.Evento;
import modelo.Invitado;
import modelo.InvitadoDAO;
import modelo.Persona;
import modelo.PersonaDAO;
import vista.VentanaAgasajadosModeloTabla;
import vista.VentanaAgregarPersona;
import vista.VentanaAnfitrionesModeloTabla;
import vista.VentanaInvitadosModeloTabla;

public class ControladorVentanaAgregarPersona implements ActionListener {
	private VentanaAgregarPersona ventanaAgregarPersona;
	private Evento miEvento;
	private String tipoPersona;
	
	private PersonaDAO personaDao;
	private InvitadoDAO invitadoDao;
	private AnfitrionDAO anfitrionDao;
	private String codEvento;
	private Anfitrion anfitrion;
	
	public ControladorVentanaAgregarPersona(Evento elEvento,String tipo, String dios) {
		this.tipoPersona = tipo;
		this.codEvento = dios;
		
		ventanaAgregarPersona = new VentanaAgregarPersona();
		ventanaAgregarPersona.setLocationRelativeTo(null);
		ventanaAgregarPersona.setVisible(true);
		ventanaAgregarPersona.agregarListener(this);
		ventanaAgregarPersona.cambiarCampos(tipo);
		this.miEvento = elEvento;
		this.cargarListado();
			
		invitadoDao = new InvitadoDAO();
		anfitrionDao = new AnfitrionDAO();
		personaDao = new PersonaDAO();
		
	
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		if (e.getActionCommand().equalsIgnoreCase("Agregar")){
			
			if (ventanaAgregarPersona.datosLlenos()){
				if(tipoPersona.equals("Invitados")){
					agregarInvitadoEvento();
				}
				else if(tipoPersona.equals("Anfitriones")){
					agregarAnfitrionEvento();
					
				}
				else if(tipoPersona.equals("Agasajados")){
					agregarAgasajadoEvento();
					
				}
				ventanaAgregarPersona.limpiarCampos();
				this.cargarListado();
			}
			else
				ventanaAgregarPersona.mostrarMensaje("Debe llenar todos los campos");
		} else {
			ventanaAgregarPersona.dispose();
		}
		
	}
	
	private void agregarInvitadoEvento() {
		try{
			Invitado invitado = new Invitado();
			
			String cedula= ventanaAgregarPersona.getTxtCedula();
			String nombre= ventanaAgregarPersona.getTxtNombre();
			String apellido= ventanaAgregarPersona.getTxtApellido();
			String telefono= ventanaAgregarPersona.getTxtTelefono();

			invitado.setApellido(apellido);
			invitado.setCedula(cedula);
			invitado.setNombre(nombre);
			invitado.setTelefono(telefono);
			
			//Invitado invitado = new Invitado(cedula,nombre,apellido,telefono);
			//miEvento.agregarInvitados(invitado);	

			
			invitadoDao = new InvitadoDAO();
		    invitadoDao.registrarInvitadoAsociacion(cedula, codEvento);
		    
		    invitadoDao = new InvitadoDAO();
		    invitadoDao.registrarInvitado(invitado);

		    
		}
		catch(Exception e) {
			// Mensaje de Dialogo en caso de que ocurra cualquier otra excepcion
			ventanaAgregarPersona.mostrarMensaje(e.toString());
		}
		
	}
	
	private void agregarAnfitrionEvento() {
		try{
			
			Anfitrion anfitrion = new Anfitrion();
			
			String cedula=ventanaAgregarPersona.getTxtCedula();
			String nombre=ventanaAgregarPersona.getTxtNombre();
			String apellido=ventanaAgregarPersona.getTxtApellido();
			String email=ventanaAgregarPersona.getTxtTelefono();
			
			//Anfitrion anfitrion = new Anfitrion(cedula,nombre,apellido,email);
			//miEvento.agregarAnfitriones(anfitrion);	
			
			anfitrion.setApellido(apellido);
			anfitrion.setCedula(cedula);
			anfitrion.setEmail(email);
			anfitrion.setNombre(nombre);
			
			anfitrionDao = new AnfitrionDAO();
			anfitrionDao.registrarAnfitrionAsociacion(cedula, codEvento);
			anfitrionDao = new AnfitrionDAO();
			anfitrionDao.registrarAnfitrion(anfitrion);
		

			
		}
		catch(Exception e) {
			// Mensaje de Dialogo en caso de que ocurra cualquier otra excepcion
			ventanaAgregarPersona.mostrarMensaje(e.toString());
		}
		
	}
	
	private void agregarAgasajadoEvento() {
		try{
			Persona persona = new Persona();
			
			String cedula=ventanaAgregarPersona.getTxtCedula();
			String nombre=ventanaAgregarPersona.getTxtNombre();
			String apellido=ventanaAgregarPersona.getTxtApellido();
			
			//Persona agasajado = new Persona(cedula,nombre,apellido);
			//miEvento.agregarAgasajados(agasajado);	
		
			persona.setApellido(apellido);
			persona.setCedula(cedula);
			persona.setNombre(nombre);
			
			personaDao = new PersonaDAO();
			personaDao.registrarAnfitrion(persona);
			personaDao = new PersonaDAO();
			personaDao.registrarPersonaAsociacion(cedula, codEvento);
		
		}
		catch(Exception e) {
			// Mensaje de Dialogo en caso de que ocurra cualquier otra excepcion
			ventanaAgregarPersona.mostrarMensaje(e.toString());
		}
		
	}

	private void cargarListado() {
		
		invitadoDao = new InvitadoDAO();
		int numinv = invitadoDao.numeroEvento(codEvento);
		anfitrionDao = new AnfitrionDAO();
		int numanfi = anfitrionDao.numeroAnfitriones(codEvento);
		personaDao = new PersonaDAO();
		int numper = personaDao.numeroPersonas(codEvento);
		
		if(tipoPersona.equals("Invitados")){
			//if  (miEvento.cantInvitados()>0){
			if ( numinv > 0) {
				
			//	ArrayList<Invitado> invitados =  miEvento.getInvitados();
				invitadoDao = new InvitadoDAO();
				ArrayList<Invitado> invitados = invitadoDao.consultarInvitado(codEvento);

				ventanaAgregarPersona.setListado(new VentanaInvitadosModeloTabla(invitados));
			
			}
		}
		else if(tipoPersona.equals("Anfitriones")){
		
			//if  (miEvento.cantAnfitriones()>0){
				
			if (numanfi > 0) {
				//ArrayList<Anfitrion> anfitriones =  miEvento.getAnfitriones();
				
				anfitrionDao = new AnfitrionDAO();
				List<Anfitrion> anfitriones = anfitrionDao.consultarAnfitrion(codEvento);
				ventanaAgregarPersona.setListado(new VentanaAnfitrionesModeloTabla(anfitriones));
			
			}
		}
		else if(tipoPersona.equals("Agasajados")){
			
		//	if  (miEvento.cantAgasajados()>0){
			if (numper > 0) {
			
				//ArrayList<Persona> agasajados =  miEvento.getAgasajados();
				personaDao = new PersonaDAO();
				ArrayList<Persona> agasajados = personaDao.consultarPersona(codEvento); 
				ventanaAgregarPersona.setListado(new VentanaAgasajadosModeloTabla(agasajados));
			}
		}
	}	 
}

